using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using CompanyX.Insurance.La.DataContracts;
//using CompanyX.Insurance.La.FaultContracts;

namespace CompanyX.Insurance.La.ServiceContracts
{
    /// <summary>
    /// This is the interface definition for Life &amp; Annuity insurance inforce administration transactions
    /// </summary>
    /// <remarks>ACORD v2.18.02 compliant (includes custom schema extensions for operation faults)</remarks>
    [XmlSerializerFormat]
    [ServiceContract(Name = "InforceAdministration", Namespace = "urn:CompanyX.Insurance.La.ServiceContracts")]
    public interface IInforceAdministration
    {
        /// <summary>
        /// The purpose of this transaction is to Set Up(Add)/Update/Delete/Cease/Suspend/Restart an Arrangement
        /// (Automatic Scheduled Financial Activity) like asset allocation, automatic asset rebalancing, etc
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "ProcessAutomaticScheduledFinancialActivity")]
        //[FaultContract(typeof(ProcessAutomaticScheduledFinancialActivityFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse ProcessAutomaticScheduledFinancialActivity([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// To change one of the addresses for either a party or a grouping
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "UpdateAddress")]
        //[FaultContract(typeof(UpdateAddressFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse UpdateAddress([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// To change one of the phone numbers for a party
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "UpdatePhoneNumber")]
        //[FaultContract(typeof(UpdatePhoneNumberFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse UpdatePhoneNumber([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// To change one of the email addresses for either a party or a grouping
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "UpdateEmailAddress")]
        //[FaultContract(typeof(UpdateEmailAddressFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse UpdateEmailAddress([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);
    }
}
